//
//  CJStatusListViewModel.swift
//  SwiftDemo
//
//  Created by Chris on 2017/6/29.
//  Copyright © 2017年 chris. All rights reserved.
//

import Foundation

/// 最大错误请求次数
private let maxErrorRequestTimes = 3

class CJStatusListViewModel {
    
    /// 懒加载status模型数组
    lazy var statusList = [CJStatus]()
    
    /// 当前错误请求次数
    private var errorRequestTimes = 0
    
    /// 加载status数组列表
    ///
    /// - Parameter isPullUp: 是否是上拉加载更多操作
    /// - Parameter completion: 完成回调[网络请求结果Bool, 是否要刷新数据]
    func loadStatus(isPullUp: Bool, completion: @escaping (Bool, Bool) -> ()) {
        
        if isPullUp && errorRequestTimes > maxErrorRequestTimes {
            
            print("加载0条数据, 超过最大访问次数,没有更多的数据!")
            
            completion(false, false)
            
            return;
        } else if !isPullUp {
            //下拉刷新时,重置 上拉刷新次数
            errorRequestTimes = 0
        }
        
        let since_id = isPullUp ? 0 : statusList.first?.id ?? 0
        
        let max_id = !isPullUp ? 0 : statusList.last?.id ?? 0
        
        CJNetworkManager.statusList (since_id: since_id, max_id: max_id) { (list, isSuccess) in
            
            guard let array = NSArray.yy_modelArray(with: CJStatus.self, json: list ?? []) as? [CJStatus] else {
                
                print("获取到0条数据, 没有新数据")
                
                completion(isSuccess, false)
                return
            }
            if isPullUp {
                self.statusList += array
            } else {
                // 下拉刷新时, 把最新数据放在前面
                self.statusList = array + self.statusList
            }
            if isPullUp && array.count == 0 {
                // 当返回数据为0时, 已经没有更多数据, 不需要刷新数据
                self.errorRequestTimes += 1
                
                print("获取到0条数据, 没有更多的刷新数据")
                
                completion(isSuccess, false)
            } else {
                
                print("获取到\(array.count)条数据, 刷新数据")
                
                completion(isSuccess, true)
            }
        }
    }
}
